🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / app / src / main / java / com / geeksville / mesh / model / DebugViewModel.kt
Displaying Raw • Download
app/src/main/java/com/geeksville/mesh/model/DebugViewModel.kt ui_message_list (be3f882f) Text, 16.42 KB
T8b949e/*
* Copyright (c) 2025 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787com.geeksville.mesh.model
Tff7b72import T7ee787androidx.compose.runtime.Immutable
Tff7b72import T7ee787androidx.lifecycle.ViewModel
Tff7b72import T7ee787androidx.lifecycle.viewModelScope
Tff7b72import T7ee787com.geeksville.mesh.AdminProtos
Tff7b72import T7ee787com.geeksville.mesh.MeshProtos
Tff7b72import T7ee787com.geeksville.mesh.PaxcountProtos
Tff7b72import T7ee787com.geeksville.mesh.Portnums.PortNum
Tff7b72import T7ee787com.geeksville.mesh.StoreAndForwardProtos
Tff7b72import T7ee787com.geeksville.mesh.TelemetryProtos
Tff7b72import T7ee787com.geeksville.mesh.android.Logging
Tff7b72import T7ee787com.geeksville.mesh.database.MeshLogRepository
Tff7b72import T7ee787com.geeksville.mesh.database.entity.MeshLog
Tff7b72import T7ee787com.geeksville.mesh.repository.datastore.RadioConfigRepository
Tff7b72import T7ee787com.geeksville.mesh.ui.debug.FilterMode
Tff7b72import T7ee787com.google.protobuf.InvalidProtocolBufferException
Tff7b72import T7ee787dagger.hilt.android.lifecycle.HiltViewModel
Tff7b72import T7ee787kotlinx.collections.immutable.ImmutableList
Tff7b72import T7ee787kotlinx.collections.immutable.persistentListOf
Tff7b72import T7ee787kotlinx.collections.immutable.toImmutableList
Tff7b72import T7ee787kotlinx.coroutines.Dispatchers
Tff7b72import T7ee787kotlinx.coroutines.flow.MutableStateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.SharingStarted
Tff7b72import T7ee787kotlinx.coroutines.flow.StateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.asStateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.combine
Tff7b72import T7ee787kotlinx.coroutines.flow.map
Tff7b72import T7ee787kotlinx.coroutines.flow.stateIn
Tff7b72import T7ee787kotlinx.coroutines.launch
Tff7b72import T7ee787java.text.DateFormat
Tff7b72import T7ee787java.util.Date
Tff7b72import T7ee787java.util.Locale
Tff7b72import T7ee787javax.inject.Inject
Tff7b72data Tff7b72class T56d364SearchMatchTb4b4b4(Tff7b72val Te6edf3logIndexTb4b4b4: Tffa657IntTb4b4b4, Tff7b72val Te6edf3startTb4b4b4: Tffa657IntTb4b4b4, Tff7b72val Te6edf3endTb4b4b4: Tffa657IntTb4b4b4, Tff7b72val Te6edf3fieldTb4b4b4: Tffa657StringTb4b4b4)
Tff7b72data Tff7b72class T56d364SearchStateTb4b4b4(
Tff7b72val Te6edf3searchTextTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tff7b72val Te6edf3currentMatchIndexTb4b4b4: Tffa657Int Tff7b72= Tff7b72-T79c0ff1Tb4b4b4,
Tff7b72val Te6edf3allMatchesTb4b4b4: Te6edf3ListTff7b72<Te6edf3SearchMatchTff7b72> Tff7b72= Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3hasMatchesTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4)
T8b949e// --- Search and Filter Managers ---
Tff7b72class T56d364LogSearchManager Tb4b4b4{
Tff7b72data Tff7b72class T56d364SearchMatchTb4b4b4(Tff7b72val Te6edf3logIndexTb4b4b4: Tffa657IntTb4b4b4, Tff7b72val Te6edf3startTb4b4b4: Tffa657IntTb4b4b4, Tff7b72val Te6edf3endTb4b4b4: Tffa657IntTb4b4b4, Tff7b72val Te6edf3fieldTb4b4b4: Tffa657StringTb4b4b4)
Tff7b72data Tff7b72class T56d364SearchStateTb4b4b4(
Tff7b72val Te6edf3searchTextTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tff7b72val Te6edf3currentMatchIndexTb4b4b4: Tffa657Int Tff7b72= Tff7b72-T79c0ff1Tb4b4b4,
Tff7b72val Te6edf3allMatchesTb4b4b4: Te6edf3ListTff7b72<Te6edf3SearchMatchTff7b72> Tff7b72= Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3hasMatchesTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3_searchText Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72val Te6edf3searchText Tff7b72= Te6edf3_searchTextTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3_currentMatchIndex Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Tff7b72-T79c0ff1Tb4b4b4)
Tff7b72val Te6edf3currentMatchIndex Tff7b72= Te6edf3_currentMatchIndexTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3_searchState Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Te6edf3SearchStateTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3searchState Tff7b72= Te6edf3_searchStateTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72fun Td2a8ffsetSearchTextTb4b4b4(Te6edf3textTb4b4b4: Tffa657StringTb4b4b4) Tb4b4b4{
Te6edf3_searchTextTb4b4b4.Te6edf3value Tff7b72= Te6edf3text
Te6edf3_currentMatchIndexTb4b4b4.Te6edf3value Tff7b72= Tff7b72-T79c0ff1
Tb4b4b4}
Tff7b72fun Td2a8ffgoToNextMatchTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3matches Tff7b72= Te6edf3_searchStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3allMatches
Tff7b72if Tb4b4b4(Te6edf3matchesTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3nextIndex Tff7b72= Tff7b72if Tb4b4b4(Te6edf3_currentMatchIndexTb4b4b4.Te6edf3value Tff7b72< Te6edf3matchesTb4b4b4.Te6edf3lastIndexTb4b4b4) Te6edf3_currentMatchIndexTb4b4b4.Te6edf3value Tff7b72+ T79c0ff1 Tff7b72else T79c0ff0
Te6edf3_currentMatchIndexTb4b4b4.Te6edf3value Tff7b72= Te6edf3nextIndex
Te6edf3_searchStateTb4b4b4.Te6edf3value Tff7b72= Te6edf3_searchStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3currentMatchIndex Tff7b72= Te6edf3nextIndexTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffgoToPreviousMatchTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3matches Tff7b72= Te6edf3_searchStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3allMatches
Tff7b72if Tb4b4b4(Te6edf3matchesTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3prevIndex Tff7b72= Tff7b72if Tb4b4b4(Te6edf3_currentMatchIndexTb4b4b4.Te6edf3value Tff7b72> T79c0ff0Tb4b4b4) Te6edf3_currentMatchIndexTb4b4b4.Te6edf3value Tff7b72- T79c0ff1 Tff7b72else Te6edf3matchesTb4b4b4.Te6edf3lastIndex
Te6edf3_currentMatchIndexTb4b4b4.Te6edf3value Tff7b72= Te6edf3prevIndex
Te6edf3_searchStateTb4b4b4.Te6edf3value Tff7b72= Te6edf3_searchStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3currentMatchIndex Tff7b72= Te6edf3prevIndexTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffclearSearchTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3setSearchTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72fun Td2a8ffupdateMatchesTb4b4b4(Te6edf3searchTextTb4b4b4: Tffa657StringTb4b4b4, Te6edf3filteredLogsTb4b4b4: Te6edf3ListTff7b72<Te6edf3DebugViewModelTb4b4b4.Te6edf3UiMeshLogTff7b72>Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3matches Tff7b72= Te6edf3findSearchMatchesTb4b4b4(Te6edf3searchTextTb4b4b4, Te6edf3filteredLogsTb4b4b4)
Tff7b72val Te6edf3hasMatches Tff7b72= Te6edf3matchesTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)
Te6edf3_searchStateTb4b4b4.Te6edf3value Tff7b72=
Te6edf3_searchStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3copyTb4b4b4(
Te6edf3searchText Tff7b72= Te6edf3searchTextTb4b4b4,
Te6edf3allMatches Tff7b72= Te6edf3matchesTb4b4b4,
Te6edf3hasMatches Tff7b72= Te6edf3hasMatchesTb4b4b4,
Te6edf3currentMatchIndex Tff7b72= Tff7b72if Tb4b4b4(Te6edf3hasMatchesTb4b4b4) Te6edf3_currentMatchIndexTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3coerceInTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3matchesTb4b4b4.Te6edf3lastIndexTb4b4b4) Tff7b72else Tff7b72-T79c0ff1Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72fun Td2a8fffindSearchMatchesTb4b4b4(Te6edf3searchTextTb4b4b4: Tffa657StringTb4b4b4, Te6edf3filteredLogsTb4b4b4: Te6edf3ListTff7b72<Te6edf3DebugViewModelTb4b4b4.Te6edf3UiMeshLogTff7b72>Tb4b4b4)Tb4b4b4: Te6edf3ListTff7b72<Te6edf3SearchMatchTff7b72> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3searchTextTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3emptyListTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tff7b72return Te6edf3filteredLogs
Tb4b4b4.Te6edf3flatMapIndexed Tb4b4b4{ Te6edf3logIndexTb4b4b4, Te6edf3log Tff7b72-Tff7b72>
Te6edf3searchTextTb4b4b4.Te6edf3splitTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3flatMap Tb4b4b4{ Te6edf3term Tff7b72-Tff7b72>
Tff7b72val Te6edf3escapedTerm Tff7b72= Te6edf3RegexTb4b4b4.Te6edf3escapeTb4b4b4(Te6edf3termTb4b4b4)
Tff7b72val Te6edf3regex Tff7b72= Te6edf3escapedTermTb4b4b4.Te6edf3toRegexTb4b4b4(Te6edf3RegexOptionTb4b4b4.Te6edf3IGNORE_CASETb4b4b4)
Tff7b72val Te6edf3messageMatches Tff7b72=
Te6edf3regexTb4b4b4.Te6edf3findAllTb4b4b4(Te6edf3logTb4b4b4.Te6edf3logMessageTb4b4b4)Tb4b4b4.Te6edf3map Tb4b4b4{ Te6edf3match Tff7b72-Tff7b72>
Te6edf3SearchMatchTb4b4b4(Te6edf3logIndexTb4b4b4, Te6edf3matchTb4b4b4.Te6edf3rangeTb4b4b4.Te6edf3firstTb4b4b4, Te6edf3matchTb4b4b4.Te6edf3rangeTb4b4b4.Te6edf3lastTb4b4b4, Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3typeMatches Tff7b72=
Te6edf3regexTb4b4b4.Te6edf3findAllTb4b4b4(Te6edf3logTb4b4b4.Te6edf3messageTypeTb4b4b4)Tb4b4b4.Te6edf3map Tb4b4b4{ Te6edf3match Tff7b72-Tff7b72>
Te6edf3SearchMatchTb4b4b4(Te6edf3logIndexTb4b4b4, Te6edf3matchTb4b4b4.Te6edf3rangeTb4b4b4.Te6edf3firstTb4b4b4, Te6edf3matchTb4b4b4.Te6edf3rangeTb4b4b4.Te6edf3lastTb4b4b4, Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3dateMatches Tff7b72=
Te6edf3regexTb4b4b4.Te6edf3findAllTb4b4b4(Te6edf3logTb4b4b4.Te6edf3formattedReceivedDateTb4b4b4)Tb4b4b4.Te6edf3map Tb4b4b4{ Te6edf3match Tff7b72-Tff7b72>
Te6edf3SearchMatchTb4b4b4(Te6edf3logIndexTb4b4b4, Te6edf3matchTb4b4b4.Te6edf3rangeTb4b4b4.Te6edf3firstTb4b4b4, Te6edf3matchTb4b4b4.Te6edf3rangeTb4b4b4.Te6edf3lastTb4b4b4, Ta5d6ff"Ta5d6ffdateTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3decodedPayloadMatches Tff7b72=
Te6edf3logTb4b4b4.Te6edf3decodedPayloadTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3decoded Tff7b72-Tff7b72>
Te6edf3regexTb4b4b4.Te6edf3findAllTb4b4b4(Te6edf3decodedTb4b4b4)Tb4b4b4.Te6edf3map Tb4b4b4{ Te6edf3match Tff7b72-Tff7b72>
Te6edf3SearchMatchTb4b4b4(Te6edf3logIndexTb4b4b4, Te6edf3matchTb4b4b4.Te6edf3rangeTb4b4b4.Te6edf3firstTb4b4b4, Te6edf3matchTb4b4b4.Te6edf3rangeTb4b4b4.Te6edf3lastTb4b4b4, Ta5d6ff"Ta5d6ffdecodedPayloadTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4} Tff7b72?: Te6edf3emptySequenceTb4b4b4(Tb4b4b4)
Te6edf3messageMatches Tff7b72+ Te6edf3typeMatches Tff7b72+ Te6edf3dateMatches Tff7b72+ Te6edf3decodedPayloadMatches
Tb4b4b4}
Tb4b4b4}
Tb4b4b4.Te6edf3sortedBy Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3start Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72class T56d364LogFilterManager Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3_filterTexts Tff7b72= Te6edf3MutableStateFlowTff7b72<Te6edf3ListTff7b72<Tffa657StringTff7b72>Tff7b72>Tb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3filterTexts Tff7b72= Te6edf3_filterTextsTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3_filteredLogs Tff7b72= Te6edf3MutableStateFlowTff7b72<Te6edf3ListTff7b72<Te6edf3DebugViewModelTb4b4b4.Te6edf3UiMeshLogTff7b72>Tff7b72>Tb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3filteredLogs Tff7b72= Te6edf3_filteredLogsTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72fun Td2a8ffsetFilterTextsTb4b4b4(Te6edf3filtersTb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72>Tb4b4b4) Tb4b4b4{
Te6edf3_filterTextsTb4b4b4.Te6edf3value Tff7b72= Te6edf3filters
Tb4b4b4}
Tff7b72fun Td2a8ffupdateFilteredLogsTb4b4b4(Te6edf3logsTb4b4b4: Te6edf3ListTff7b72<Te6edf3DebugViewModelTb4b4b4.Te6edf3UiMeshLogTff7b72>Tb4b4b4) Tb4b4b4{
Te6edf3_filteredLogsTb4b4b4.Te6edf3value Tff7b72= Te6edf3logs
Tb4b4b4}
Tff7b72fun Td2a8fffilterLogsTb4b4b4(
Te6edf3logsTb4b4b4: Te6edf3ListTff7b72<Te6edf3DebugViewModelTb4b4b4.Te6edf3UiMeshLogTff7b72>Tb4b4b4,
Te6edf3filterTextsTb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72>Tb4b4b4,
Te6edf3filterModeTb4b4b4: Te6edf3FilterModeTb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3ListTff7b72<Te6edf3DebugViewModelTb4b4b4.Te6edf3UiMeshLogTff7b72> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3filterTextsTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72return Te6edf3logs
Tff7b72return Te6edf3logsTb4b4b4.Te6edf3filter Tb4b4b4{ Te6edf3log Tff7b72-Tff7b72>
Tff7b72when Tb4b4b4(Te6edf3filterModeTb4b4b4) Tb4b4b4{
Te6edf3FilterModeTb4b4b4.Te6edf3OR Tff7b72-Tff7b72>
Te6edf3filterTextsTb4b4b4.Te6edf3any Tb4b4b4{ Te6edf3filterText Tff7b72-Tff7b72>
Te6edf3logTb4b4b4.Te6edf3logMessageTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3filterTextTb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72|Tff7b72|
Te6edf3logTb4b4b4.Te6edf3messageTypeTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3filterTextTb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72|Tff7b72|
Te6edf3logTb4b4b4.Te6edf3formattedReceivedDateTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3filterTextTb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72|Tff7b72|
Tb4b4b4(Te6edf3logTb4b4b4.Te6edf3decodedPayloadTff7b72?.Te6edf3containsTb4b4b4(Te6edf3filterTextTb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72=Tff7b72= Tff7b72trueTb4b4b4)
Tb4b4b4}
Te6edf3FilterModeTb4b4b4.Te6edf3AND Tff7b72-Tff7b72>
Te6edf3filterTextsTb4b4b4.Te6edf3all Tb4b4b4{ Te6edf3filterText Tff7b72-Tff7b72>
Te6edf3logTb4b4b4.Te6edf3logMessageTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3filterTextTb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72|Tff7b72|
Te6edf3logTb4b4b4.Te6edf3messageTypeTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3filterTextTb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72|Tff7b72|
Te6edf3logTb4b4b4.Te6edf3formattedReceivedDateTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3filterTextTb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72|Tff7b72|
Tb4b4b4(Te6edf3logTb4b4b4.Te6edf3decodedPayloadTff7b72?.Te6edf3containsTb4b4b4(Te6edf3filterTextTb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72=Tff7b72= Tff7b72trueTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72private Tff7b72const Tff7b72val Te6edf3HEX_FORMAT Tff7b72= Ta5d6ff"Ta5d6ff%02xTa5d6ff"
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffTooManyFunctionsTa5d6ff"Tb4b4b4)
Tf0883e@HiltViewModel
Tff7b72class T56d364DebugViewModel
Tf0883e@Inject
Tff7b72constructorTb4b4b4(
Tff7b72private Tff7b72val Te6edf3meshLogRepositoryTb4b4b4: Te6edf3MeshLogRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3radioConfigRepositoryTb4b4b4: Te6edf3RadioConfigRepositoryTb4b4b4,
Tb4b4b4) Tb4b4b4: Te6edf3ViewModelTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3Logging Tb4b4b4{
Tff7b72val Te6edf3meshLogTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3ImmutableListTff7b72<Te6edf3UiMeshLogTff7b72>Tff7b72> Tff7b72=
Te6edf3meshLogRepository
Tb4b4b4.Te6edf3getAllLogsTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3mapTb4b4b4(Tff7b72::Te6edf3toUiStateTb4b4b4)
Tb4b4b4.Te6edf3stateInTb4b4b4(Te6edf3viewModelScopeTb4b4b4, Te6edf3SharingStartedTb4b4b4.Te6edf3WhileSubscribedTb4b4b4(T79c0ff5Te6edf3_000Tb4b4b4)Tb4b4b4, Te6edf3persistentListOfTb4b4b4(Tb4b4b4)Tb4b4b4)
T8b949e// --- Managers ---
Tff7b72val Te6edf3searchManager Tff7b72= Te6edf3LogSearchManagerTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3filterManager Tff7b72= Te6edf3LogFilterManagerTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3searchText
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3searchManagerTb4b4b4.Te6edf3searchText
Tff7b72val Te6edf3currentMatchIndex
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3searchManagerTb4b4b4.Te6edf3currentMatchIndex
Tff7b72val Te6edf3searchState
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3searchManagerTb4b4b4.Te6edf3searchState
Tff7b72val Te6edf3filterTexts
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3filterManagerTb4b4b4.Te6edf3filterTexts
Tff7b72val Te6edf3filteredLogs
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3filterManagerTb4b4b4.Te6edf3filteredLogs
Tff7b72private Tff7b72val Te6edf3_selectedLogId Tff7b72= Te6edf3MutableStateFlowTff7b72<Tffa657String?Tff7b72>Tb4b4b4(Tff7b72nullTb4b4b4)
Tff7b72val Te6edf3selectedLogId Tff7b72= Te6edf3_selectedLogIdTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72fun Td2a8ffupdateFilteredLogsTb4b4b4(Te6edf3logsTb4b4b4: Te6edf3ListTff7b72<Te6edf3UiMeshLogTff7b72>Tb4b4b4) Tb4b4b4{
Te6edf3filterManagerTb4b4b4.Te6edf3updateFilteredLogsTb4b4b4(Te6edf3logsTb4b4b4)
Te6edf3searchManagerTb4b4b4.Te6edf3updateMatchesTb4b4b4(Te6edf3searchManagerTb4b4b4.Te6edf3searchTextTb4b4b4.Te6edf3valueTb4b4b4, Te6edf3logsTb4b4b4)
Tb4b4b4}
Tff7b72init Tb4b4b4{
Te6edf3debugTb4b4b4(Ta5d6ff"Ta5d6ffDebugViewModel createdTa5d6ff"Tb4b4b4)
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{
Te6edf3combineTb4b4b4(Te6edf3searchManagerTb4b4b4.Te6edf3searchTextTb4b4b4, Te6edf3filterManagerTb4b4b4.Te6edf3filteredLogsTb4b4b4) Tb4b4b4{ Te6edf3searchTextTb4b4b4, Te6edf3logs Tff7b72-Tff7b72>
Te6edf3searchManagerTb4b4b4.Te6edf3findSearchMatchesTb4b4b4(Te6edf3searchTextTb4b4b4, Te6edf3logsTb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3collect Tb4b4b4{ Te6edf3matches Tff7b72-Tff7b72>
Te6edf3searchManagerTb4b4b4.Te6edf3updateMatchesTb4b4b4(Te6edf3searchManagerTb4b4b4.Te6edf3searchTextTb4b4b4.Te6edf3valueTb4b4b4, Te6edf3filterManagerTb4b4b4.Te6edf3filteredLogsTb4b4b4.Te6edf3valueTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72override Tff7b72fun Td2a8ffonClearedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onClearedTb4b4b4(Tb4b4b4)
Te6edf3debugTb4b4b4(Ta5d6ff"Ta5d6ffDebugViewModel clearedTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72private Tff7b72fun Td2a8fftoUiStateTb4b4b4(Te6edf3databaseLogsTb4b4b4: Te6edf3ListTff7b72<Te6edf3MeshLogTff7b72>Tb4b4b4) Tff7b72= Te6edf3databaseLogs
Tb4b4b4.Te6edf3map Tb4b4b4{ Te6edf3log Tff7b72-Tff7b72>
Te6edf3UiMeshLogTb4b4b4(
Te6edf3uuid Tff7b72= Te6edf3logTb4b4b4.Te6edf3uuidTb4b4b4,
Te6edf3messageType Tff7b72= Te6edf3logTb4b4b4.Te6edf3message_typeTb4b4b4,
Te6edf3formattedReceivedDate Tff7b72= Te6edf3TIME_FORMATTb4b4b4.Te6edf3formatTb4b4b4(Te6edf3logTb4b4b4.Te6edf3received_dateTb4b4b4)Tb4b4b4,
Te6edf3logMessage Tff7b72= Te6edf3annotateMeshLogMessageTb4b4b4(Te6edf3logTb4b4b4)Tb4b4b4,
Te6edf3decodedPayload Tff7b72= Te6edf3decodePayloadFromMeshLogTb4b4b4(Te6edf3logTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3toImmutableListTb4b4b4(Tb4b4b4)
T8b949e/** Transform the input [MeshLog] by enhancing the raw message with annotations. */
Tff7b72private Tff7b72fun Td2a8ffannotateMeshLogMessageTb4b4b4(Te6edf3meshLogTb4b4b4: Te6edf3MeshLogTb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Tff7b72when Tb4b4b4(Te6edf3meshLogTb4b4b4.Te6edf3message_typeTb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ffPacketTa5d6ff" Tff7b72-Tff7b72> Te6edf3meshLogTb4b4b4.Te6edf3meshPacketTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3packet Tff7b72-Tff7b72> Te6edf3annotatePacketLogTb4b4b4(Te6edf3packetTb4b4b4) Tb4b4b4} Tff7b72?: Te6edf3meshLogTb4b4b4.Te6edf3raw_message
Ta5d6ff"Ta5d6ffNodeInfoTa5d6ff" Tff7b72-Tff7b72>
Te6edf3meshLogTb4b4b4.Te6edf3nodeInfoTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3nodeInfo Tff7b72-Tff7b72> Te6edf3annotateRawMessageTb4b4b4(Te6edf3meshLogTb4b4b4.Te6edf3raw_messageTb4b4b4, Te6edf3nodeInfoTb4b4b4.Te6edf3numTb4b4b4) Tb4b4b4}
Tff7b72?: Te6edf3meshLogTb4b4b4.Te6edf3raw_message
Ta5d6ff"Ta5d6ffMyNodeInfoTa5d6ff" Tff7b72-Tff7b72>
Te6edf3meshLogTb4b4b4.Te6edf3myNodeInfoTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3nodeInfo Tff7b72-Tff7b72> Te6edf3annotateRawMessageTb4b4b4(Te6edf3meshLogTb4b4b4.Te6edf3raw_messageTb4b4b4, Te6edf3nodeInfoTb4b4b4.Te6edf3myNodeNumTb4b4b4) Tb4b4b4}
Tff7b72?: Te6edf3meshLogTb4b4b4.Te6edf3raw_message
Tff7b72else Tff7b72-Tff7b72> Te6edf3meshLogTb4b4b4.Te6edf3raw_message
Tb4b4b4}
Tff7b72private Tff7b72fun Td2a8ffannotatePacketLogTb4b4b4(Te6edf3packetTb4b4b4: Te6edf3MeshProtosTb4b4b4.Te6edf3MeshPacketTb4b4b4)Tb4b4b4: Tffa657String Tb4b4b4{
Tff7b72val Te6edf3builder Tff7b72= Te6edf3packetTb4b4b4.Te6edf3toBuilderTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3hasDecoded Tff7b72= Te6edf3builderTb4b4b4.Te6edf3hasDecodedTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3decoded Tff7b72= Tff7b72if Tb4b4b4(Te6edf3hasDecodedTb4b4b4) Te6edf3builderTb4b4b4.Te6edf3decoded Tff7b72else Tff7b72null
Tff7b72if Tb4b4b4(Te6edf3hasDecodedTb4b4b4) Te6edf3builderTb4b4b4.Te6edf3clearDecodedTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3baseText Tff7b72= Te6edf3builderTb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3trimEndTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3result Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3hasDecoded Tff7b72&Tff7b72& Te6edf3decoded Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3decodedText Tff7b72= Te6edf3decodedTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3trimEndTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3prependIndentTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)
Ta5d6ff"Tffd700$Te6edf3baseTextTa5d6ff\Ta5d6ffndecoded {Ta5d6ff\Ta5d6ffnTffd700$Te6edf3decodedTextTa5d6ff\Ta5d6ffn}Ta5d6ff"
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3baseText
Tb4b4b4}
Tff7b72return Te6edf3annotateRawMessageTb4b4b4(Te6edf3resultTb4b4b4, Te6edf3packetTb4b4b4.Te6edf3fromTb4b4b4, Te6edf3packetTb4b4b4.Te6edf3toTb4b4b4)
Tb4b4b4}
T8b949e/** Annotate the raw message string with the node IDs provided, in hex, if they are present. */
Tff7b72private Tff7b72fun Td2a8ffannotateRawMessageTb4b4b4(Te6edf3rawMessageTb4b4b4: Tffa657StringTb4b4b4, Tff7b72vararg Te6edf3nodeIdsTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Tffa657String Tb4b4b4{
Tff7b72val Te6edf3msg Tff7b72= Te6edf3StringBuilderTb4b4b4(Te6edf3rawMessageTb4b4b4)
Tff7b72var Te6edf3mutated Tff7b72= Tff7b72false
Te6edf3nodeIdsTb4b4b4.Te6edf3toSetTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3nodeId Tff7b72-Tff7b72> Te6edf3mutated Tff7b72= Te6edf3mutated Te6edf3or Te6edf3msgTb4b4b4.Te6edf3annotateNodeIdTb4b4b4(Te6edf3nodeIdTb4b4b4) Tb4b4b4}
Tff7b72return Tff7b72if Tb4b4b4(Te6edf3mutatedTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3msgTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3rawMessage
Tb4b4b4}
Tb4b4b4}
T8b949e/** Look for a single node ID integer in the string and annotate it with the hex equivalent if found. */
Tff7b72private Tff7b72fun Te6edf3StringBuilderTb4b4b4.Td2a8ffannotateNodeIdTb4b4b4(Te6edf3nodeIdTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Tffa657Boolean Tb4b4b4{
Tff7b72val Te6edf3nodeIdStr Tff7b72= Te6edf3nodeIdTb4b4b4.Te6edf3toUIntTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)
T8b949e// Only match if whitespace before and after
Tff7b72val Te6edf3regex Tff7b72= Te6edf3RegexTb4b4b4(Ta5d6ff"""Ta5d6ff(?<=Ta5d6ff\Ta5d6ffs|^)Tffd700${Te6edf3RegexTb4b4b4.Te6edf3escapeTb4b4b4(Te6edf3nodeIdStrTb4b4b4)Tffd700}Ta5d6ff(?=Ta5d6ff\Ta5d6ffs|$Ta5d6ff)Ta5d6ff"""Tb4b4b4)
Te6edf3regexTb4b4b4.Te6edf3findTb4b4b4(Tff7b72thisTb4b4b4)Tff7b72?.Te6edf3let Tb4b4b4{ Te6edf3matchResult Tff7b72-Tff7b72>
Te6edf3matchResultTb4b4b4.Te6edf3groupValuesTb4b4b4.Te6edf3let Tb4b4b4{ Te6edf3_ Tff7b72-Tff7b72>
Te6edf3regexTb4b4b4.Te6edf3findAllTb4b4b4(Tff7b72thisTb4b4b4)Tb4b4b4.Te6edf3toListTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3asReversedTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3match Tff7b72-Tff7b72>
Tff7b72val Te6edf3idx Tff7b72= Te6edf3matchTb4b4b4.Te6edf3rangeTb4b4b4.Te6edf3last Tff7b72+ T79c0ff1
Te6edf3insertTb4b4b4(Te6edf3idxTb4b4b4, Ta5d6ff"Ta5d6ff (Tffd700${Te6edf3nodeIdTb4b4b4.Te6edf3asNodeIdTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff)Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tff7b72true
Tb4b4b4}
Tff7b72return Tff7b72false
Tb4b4b4}
Tff7b72private Tff7b72fun Te6edf3IntTb4b4b4.Td2a8ffasNodeIdTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ff!%08xTa5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(Te6edf3LocaleTb4b4b4.Te6edf3getDefaultTb4b4b4(Tb4b4b4)Tb4b4b4, Tff7b72thisTb4b4b4)
Tff7b72fun Td2a8ffdeleteAllLogsTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3viewModelScopeTb4b4b4.Te6edf3launchTb4b4b4(Te6edf3DispatchersTb4b4b4.Te6edf3IOTb4b4b4) Tb4b4b4{ Te6edf3meshLogRepositoryTb4b4b4.Te6edf3deleteAllTb4b4b4(Tb4b4b4) Tb4b4b4}
Tf0883e@Immutable
Tff7b72data Tff7b72class T56d364UiMeshLogTb4b4b4(
Tff7b72val Te6edf3uuidTb4b4b4: Tffa657StringTb4b4b4,
Tff7b72val Te6edf3messageTypeTb4b4b4: Tffa657StringTb4b4b4,
Tff7b72val Te6edf3formattedReceivedDateTb4b4b4: Tffa657StringTb4b4b4,
Tff7b72val Te6edf3logMessageTb4b4b4: Tffa657StringTb4b4b4,
Tff7b72val Te6edf3decodedPayloadTb4b4b4: Tffa657String? Tff7b72= Tff7b72nullTb4b4b4,
Tb4b4b4)
Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3TIME_FORMAT Tff7b72= Te6edf3DateFormatTb4b4b4.Te6edf3getDateTimeInstanceTb4b4b4(Te6edf3DateFormatTb4b4b4.Te6edf3SHORTTb4b4b4, Te6edf3DateFormatTb4b4b4.Te6edf3MEDIUMTb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3presetFiltersTb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72>
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3buildList Tb4b4b4{
T8b949e// Our address if available
Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3myNodeInfoTb4b4b4.Te6edf3valueTff7b72?.Te6edf3myNodeNumTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ff!%08xTa5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(Tffa657itTb4b4b4)Tb4b4b4) Tb4b4b4}
T8b949e// broadcast
Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ff!ffffffffTa5d6ff"Tb4b4b4)
T8b949e// decoded
Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffdecodedTa5d6ff"Tb4b4b4)
T8b949e// today (locale-dependent short date format)
Te6edf3addTb4b4b4(Te6edf3DateFormatTb4b4b4.Te6edf3getDateInstanceTb4b4b4(Te6edf3DateFormatTb4b4b4.Te6edf3SHORTTb4b4b4)Tb4b4b4.Te6edf3formatTb4b4b4(Te6edf3DateTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
T8b949e// Each app name
Te6edf3addAllTb4b4b4(Te6edf3PortNumTb4b4b4.Te6edf3entriesTb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3name Tb4b4b4}Tb4b4b4)
Tb4b4b4}
Tff7b72fun Td2a8ffsetSelectedLogIdTb4b4b4(Te6edf3idTb4b4b4: Tffa657String?Tb4b4b4) Tb4b4b4{
Te6edf3_selectedLogIdTb4b4b4.Te6edf3value Tff7b72= Te6edf3id
Tb4b4b4}
T8b949e/**
* Attempts to fully decode the payload of a MeshLog's MeshPacket using the appropriate protobuf definition, based
* on the portnum of the packet.
*
* For known portnums, the payload is parsed into its corresponding proto message and returned as a string. For text
* and alert messages, the payload is interpreted as UTF-8 text. For unknown portnums, the payload is shown as a hex
* string.
*
* @param log The MeshLog containing the packet and payload to decode.
* @return A human-readable string representation of the decoded payload, or an error message if decoding fails, or
* null if the log does not contain a decodable packet.
*/
Tff7b72private Tff7b72fun Td2a8ffdecodePayloadFromMeshLogTb4b4b4(Te6edf3logTb4b4b4: Te6edf3MeshLogTb4b4b4)Tb4b4b4: Tffa657String? Tb4b4b4{
Tff7b72var Te6edf3resultTb4b4b4: Tffa657String? Tff7b72= Tff7b72null
Tff7b72val Te6edf3packet Tff7b72= Te6edf3logTb4b4b4.Te6edf3meshPacket
Tff7b72if Tb4b4b4(Te6edf3packet Tff7b72=Tff7b72= Tff7b72null Tff7b72|Tff7b72| Tff7b72!Te6edf3packetTb4b4b4.Te6edf3hasDecodedTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3result Tff7b72= Tff7b72null
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72val Te6edf3portnum Tff7b72= Te6edf3packetTb4b4b4.Te6edf3decodedTb4b4b4.Te6edf3portnumValue
Tff7b72val Te6edf3payload Tff7b72= Te6edf3packetTb4b4b4.Te6edf3decodedTb4b4b4.Te6edf3payloadTb4b4b4.Te6edf3toByteArrayTb4b4b4(Tb4b4b4)
Te6edf3result Tff7b72=
Tff7b72try Tb4b4b4{
Tff7b72when Tb4b4b4(Te6edf3portnumTb4b4b4) Tb4b4b4{
Te6edf3PortNumTb4b4b4.Te6edf3TEXT_MESSAGE_APP_VALUETb4b4b4,
Te6edf3PortNumTb4b4b4.Te6edf3ALERT_APP_VALUETb4b4b4,
Tff7b72-Tff7b72> Te6edf3payloadTb4b4b4.Te6edf3toStringTb4b4b4(Te6edf3CharsetsTb4b4b4.Te6edf3UTF_8Tb4b4b4)
Te6edf3PortNumTb4b4b4.Te6edf3POSITION_APP_VALUE Tff7b72-Tff7b72> Te6edf3MeshProtosTb4b4b4.Te6edf3PositionTb4b4b4.Te6edf3parseFromTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)
Te6edf3PortNumTb4b4b4.Te6edf3WAYPOINT_APP_VALUE Tff7b72-Tff7b72> Te6edf3MeshProtosTb4b4b4.Te6edf3WaypointTb4b4b4.Te6edf3parseFromTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)
Te6edf3PortNumTb4b4b4.Te6edf3NODEINFO_APP_VALUE Tff7b72-Tff7b72> Te6edf3MeshProtosTb4b4b4.Te6edf3UserTb4b4b4.Te6edf3parseFromTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)
Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APP_VALUE Tff7b72-Tff7b72> Te6edf3TelemetryProtosTb4b4b4.Te6edf3TelemetryTb4b4b4.Te6edf3parseFromTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)
Te6edf3PortNumTb4b4b4.Te6edf3ROUTING_APP_VALUE Tff7b72-Tff7b72> Te6edf3MeshProtosTb4b4b4.Te6edf3RoutingTb4b4b4.Te6edf3parseFromTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)
Te6edf3PortNumTb4b4b4.Te6edf3ADMIN_APP_VALUE Tff7b72-Tff7b72> Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4.Te6edf3parseFromTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)
Te6edf3PortNumTb4b4b4.Te6edf3PAXCOUNTER_APP_VALUE Tff7b72-Tff7b72> Te6edf3PaxcountProtosTb4b4b4.Te6edf3PaxcountTb4b4b4.Te6edf3parseFromTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)
Te6edf3PortNumTb4b4b4.Te6edf3STORE_FORWARD_APP_VALUE Tff7b72-Tff7b72>
Te6edf3StoreAndForwardProtosTb4b4b4.Te6edf3StoreAndForwardTb4b4b4.Te6edf3parseFromTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)
Tff7b72else Tff7b72-Tff7b72> Te6edf3payloadTb4b4b4.Te6edf3joinToStringTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4) Tb4b4b4{ Te6edf3HEX_FORMATTb4b4b4.Te6edf3formatTb4b4b4(Tffa657itTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3InvalidProtocolBufferExceptionTb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ffFailed to decode payload: Tffd700${Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff"
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3result
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.2 - Generated in 0.15s